/**
 * CBF前端框架程序
 */
Ext.ns("Cbf.App");

Cbf.App = function() {
};

Ext.extend(Cbf.App, Ext.util.Observable, {

    /* 定义方法 */

    /**
	 * 加载组件
	 * 
	 * @param moduleId
	 *            模块ID
	 */
    loadComponent : function(node) {
	    var componentFilePath = node.attributes.componentPath;
	    var isPanel = componentFilePath.substring(componentFilePath.length - 3, componentFilePath.length) != ".js";
	    /* 加载JSON格式配置 */
	    var contentPanel = Ext.getCmp('contentPanel');
	    var _tmpComponent = Ext.getCmp(node.attributes.componentName);
	    if (_tmpComponent != null) {
		    if (isPanel) {
			    contentPanel.setActiveTab(_tmpComponent);
		    } else {
			    _tmpComponent.show();
		    }
		    return;
	    }
	    app.showAppMask();
	    Ext.Ajax.request({
	        url : "resources/scripts/module/" + componentFilePath,
	        callback : function(options, success, response) {
		        app.hideAppMask();
		        if (success) {
			        var newComponent = Ext.util.JSON.decode(response.responseText);
			        if (isPanel) {
				        var _panel = contentPanel.add(newComponent);
				        console.log(_panel.getTopToolbar);
				        _panel.getTopToolbar().addButton(node.attributes.childButtons);
				        contentPanel.setActiveTab(_panel);
			        } else {
				        eval(newComponent);
			        }
		        } else {
			        Cbf.core.Common.alert(Cbf.lang["Global.msg.title.error"], Cbf.lang["App.loadModule.error.info"], "error");
		        }
	        }
	    }, this);
    },

    /**
	 * 显示遮罩层
	 */
    showAppMask : function() {
	    Ext.getBody().mask(Cbf.lang["App.mask.msg"]);
    },

    /**
	 * 移除遮罩层
	 */
    hideAppMask : function() {
	    Ext.getBody().unmask();
    },

    /* 定义框架项目 */

    /**
	 * 头部面板
	 */
    headerPanel : {
        id : 'headerPanel',
        region : 'north',
        html : 'XXX',
        border : false,
        height : 40
    },

    /**
	 * 菜单面板
	 */
    menuPanel : {
        id : 'menuPanel',
        xtype : 'panel',
        region : 'west',
        margins : '3',
        title : Cbf.lang['App.menuPanel.title'],
        split : true,
        width : 200,
        layout : 'accordion',
        collapsible : true,
        border : false,
        defaults : {
            xtype : 'treepanel',
            useArrows : true,
            autoScroll : true,
            animate : true,
            containerScroll : true,
            rootVisible : false,
            root : {
	            nodeType : 'async'
            },
            listeners : {
	            click : function(n) {
		            if (n.isLeaf()) {
			            app.loadComponent(n);
		            } else {
			            n.toggle();
		            }
	            }
            }
        },
        items : [ {
            title : Cbf.lang['App.menuPanel.quickMenu.title'],
            loader : new Ext.tree.TreeLoader({
                requestMethod : 'get',
                dataUrl : 'resources/scripts/datas/role/402881883a12f31b013a1301ae310000/402881883a12f31b013a1301af260002_all_menu.json'
            })
        }, {
            title : Cbf.lang['App.menuPanel.allMenu.title'],
            loader : new Ext.tree.TreeLoader({
                requestMethod : 'get',
                dataUrl : 'resources/scripts/datas/role/402881883a12f31b013a1301ae310000/402881883a12f31b013a1301af260002_all_menu.json'
            })
        } ]
    },

    /**
	 * 内容面板
	 */
    contentPanel : {
        id : 'contentPanel',
        region : 'center',
        xtype : 'tabpanel',
        margins : '3',
        border : false,
        activeTab : 0,
        resizeTabs : true,
        minTabWidth : 115,
        tabWidth : 135,
        enableTabScroll : true,
        defaults : {
	        autoScroll : true
        },
        plugins : [ new Ext.ux.TabCloseMenu(), new Ext.ux.TabScrollerMenu({
            maxText : 15,
            pageSize : 5
        }) ],
        items : {
            id : 'indexPanel',
            title : Cbf.lang["App.contentPanel.indexPanel.title"],
            autoLoad : {
                url : 'appContent',
                scripts : true,
                discardUrl : false,
                nocache : false,
                timeout : 30,
                scripts : true
            }
        }
    },

    /**
	 * 边栏面板
	 * 
	 * sidebarPanel : { id : 'sidebarPanel', xtype : 'panel', region : 'east',
	 * title : Cbf.lang["App.sidebarPanel.title"], html : 'XXX', collapsible :
	 * true, autoScroll : true, border : false, width : 150 },
	 */

    /**
	 * 底部面板
	 */
    footerPanel : {
        id : 'footerPanel',
        region : 'south',
        html : 'Information goes here',
        border : false,
        height : 30
    },

    /**
	 * 初始化界面
	 */
    init : function() {
	    app.showAppMask();
	    new Ext.Viewport({
	        layout : 'border',
	        border : false,
	        items : [ this.headerPanel, this.menuPanel, this.contentPanel, this.footerPanel ]
	    });
	    app.hideAppMask();
    }
});

/**
 * onReady
 */
var app = new Cbf.App();

Ext.onReady(function() {
	app.init();
});